C++ 输入/输出运算符重载

C++ 能够使用流提取运算符 >>流插入运算符 << 来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。

在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。

下面的实例演示了如何重载提取运算符 >> 和插入运算符 <<

      #include <iostream>
      using namespace std;

      class Distance
      {
         private:
            int feet;             // 0 到无穷
            int inches;           // 0 到 12
         public:
            // 所需的构造函数
            Distance(){
               feet = 0;
               inches = 0;
            }
            Distance(int f, int i){
               feet = f;
               inches = i;
            }
            friend ostream &operator<<( ostream &output, 
                                             const Distance &D )
            { 
               output << "F : " << D.feet << " I : " << D.inches;
               return output;            
            }

            friend istream &operator>>( istream  &input, Distance &D )
            { 
               input >> D.feet >> D.inches;
               return input;            
            }
      };
      int main()
      {
         Distance D1(11, 10), D2(5, 11), D3;

         cout << "Enter the value of object : " << endl;
         cin >> D3;
         cout << "First Distance : " << D1 << endl;
         cout << "Second Distance :" << D2 << endl;
         cout << "Third Distance :" << D3 << endl;


         return 0;
      }

当上面的代码被编译和执行时,它会产生下列结果:

      $./a.out
      Enter the value of object :
      70
      10
      First Distance : F : 11 I : 10
      Second Distance :F : 5 I : 11
      Third Distance :F : 70 I : 10

习惯上人们是使用 cin>>cout<< 的,得使用友元函数来重载运算符,如果使用成员函数来重载会出现 d1<<cout; 这种不自然的代码。

下面这个实例展示了如果运用成员函数来重载会出现的情况d1<<cout;

      #include <iostream>
      using namespace std;

      class Distance
      {
          private:
              int feet;             // 0 到无穷
              int inches;           // 0 到 12
          public:
              // 所需的构造函数
              Distance(){
                  feet = 0;
                  inches = 0;
              }
              Distance(int f, int i){
                  feet = f;
                  inches = i;
              }
              ostream& operator<<( ostream & os)
              {
                  os<<"英寸:"<<feet<<"\n英尺:"<<inches;
                  return os;
              }
      };
      int main ()
      {
          Distance d1(20,18);
          d1<<cout;//相当于d1.operator<<(cout)
      }

运行结果:

      英寸:20
      英尺:18

🔚